# требования для файлов, экспортируемых в R: не должно быть пропусков между словами в названиях столбцов; файл Exel должен быть сохранен в формате txt (текстовой файл с разделительной табуляцией) # закгрузка данных. Здесь crane - это имя, которые мы присваиваем нашему массиву данных, primer.txt - название файла, из которого нужно произвести экспорт измерений звуков, C:/My documents/R/ - это путь на вашем компьютере к файлу, из которого нужно экспортировать данные (желательно сохранить нужный файлы в папке с латинским именем, т.к. The R не распознает кирилицу). library(MASS) setwd("C:/My documents/R/") crane <- read.table(file = "primer.txt", dec = ",", header = TRUE) # проверка загруженной таблицы str(crane) names (crane) # дискриминантный анализ M3 <- lda(crane$Chick_N~.,crane) misclass <- function(pred, obs) { tbl <- table(pred, obs) sum <- colSums(tbl) dia <- diag(tbl) msc <- dia/sum * 100 m.m <- mean(msc) cat("Classification table:", "\n") print(tbl) cat("percent of correct classification:", "\n") print(round(msc, 1)) cat("Mean percent of correct classification:", round(m.m, 1), "\n") } misclass(predict(M3)$class, crane$Chick_N) # output (то, что должно получиться после проведения вышеописанного дискрима) Classification table: obs pred 1 7 12 13 17 18 20 21 25 26 28 29 39 1 5 0 0 0 0 0 0 0 0 0 0 0 0 7 0 10 0 0 0 0 0 0 0 0 0 0 0 12 0 0 10 0 0 0 0 0 0 0 0 0 0 13 0 0 0 10 0 0 0 0 0 0 0 0 0 17 0 0 0 0 10 0 0 0 0 0 0 0 0 18 0 0 0 0 0 10 0 0 0 0 0 0 0 20 0 0 0 0 0 0 4 0 0 0 0 0 0 21 0 0 0 0 0 0 0 7 0 0 0 0 0 25 0 0 0 0 0 0 0 0 10 0 0 1 0 26 0 0 0 0 0 0 0 0 0 10 0 0 0 28 0 0 0 0 0 0 0 0 0 0 8 0 0 29 0 0 0 0 0 0 0 0 0 0 0 9 0 39 0 0 0 0 0 0 0 0 0 0 0 0 10 percent of correct classification: 1 7 12 13 17 18 20 21 25 26 28 29 39 100 100 100 100 100 100 100 100 100 100 100 90 100 Mean percent of correct classification: 99.2 #randomization misclass <- function(pred, obs) { tbl <- table(pred, obs) sum <- colSums(tbl) dia <- diag(tbl) msc <- dia/sum * 100 m.m <- mean(msc) m.m } output<-data.frame(atempt=NA, mean.perc=NA) #делаем дф в который будем складывать результаты.. for (i in 1:1000){ #cat(" turn number:", i, ".....") rand1<-sample(crane$Chick_N) M7 <- lda(rand1~.,crane) m.m<-misclass(predict(M7)$class, rand1) output[i,1]<-i output[i,2]<-m.m #cat("SUCCESS!\n") } print(output) average<-mean(output[,2]) # считаем среднее по 2 колонке cat("Average m.m is ",average, "\n" ) ## показываем его на экране sd<-sd(output[,2]) min<-min(output[,2]) max<-max(output[,2]) cat("SD m.m is ",sd, "\n" ) cat("Min m.m is ",min, "\n" ) cat("Max m.m is ",max, "\n" ) #output: длинный столбик из 1000 вариантов случайных процентов правильного причисления плюс среднее, макс, мин и SD sd<-sd(output[,2]) # далее выбираем из результатов рандомизации те значения, которые больше неслучайного (назовем его условно А) output[output$mean.perc